package com.star.vrserver.controller;

import com.star.vrserver.api.R;
import com.star.vrserver.entity.User;
import com.star.vrserver.entity.vo.PageVO;
import com.star.vrserver.entity.query.UserQuery;
import com.star.vrserver.entity.vo.UserVO;
import com.star.vrserver.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author star
 * @date 2023-03-07 19:55
 * @Description UserController：用于处理用户相关请求
 */
@Api(tags = "用户信息管理Api")
@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    //用户登录：因为Get请求发送数据的方式不是json格式，所以当我们使@RequsetBody封装Get请求的数据时就会出现无法获取到数据的情况
    @ApiOperation(value = "用户登录")
    //解决办法：使用PostMapping或者不使用@RequestBody
    @PostMapping("login")
    public R userLogin(@RequestBody UserVO user){
        return R.ok().data("userToken",userService.userLogin(user.getTel(), user.getPassword()));}

    //获取所有用户信息
    @ApiOperation(value = "获取所有用户信息")
    @GetMapping("getAllUsers")
    public R getUsers() {
        return R.ok().data("userLists", userService.list());
    }

    //根据id查询用户信息
    @ApiOperation(value = "根据id查询用户信息")
    @GetMapping("getUser/{id}")
    public R getUser(@PathVariable String id) {
        return R.ok().data("userInfo", userService.getById(id));
    }

    //根据id删除用户
    @ApiOperation(value = "根据id删除用户")
    @DeleteMapping("deleteUser/{id}")
    public R deleteUser(@PathVariable String id) {
        //是否删除成功：逻辑删除
        boolean flag = userService.removeById(id);
        return flag ? R.ok() : R.error();
    }

    //添加用户
    @ApiOperation(value = "注册用户")
    @PostMapping("saveUser")
    public R saveUser(@RequestBody User user) {
        boolean flag = userService.save(user);
        return flag ? R.ok() : R.error();
    }

    //分页查询用户  current 当前页  limit 每页记录数
    @ApiOperation(value = "分页展示用户列表")
    @GetMapping("pageUser/{current}/{limit}")
    public R pageListUser(@PathVariable long current,
                          @PathVariable long limit) {
        //调用userService的分页方法
        PageVO<User> pageVO = userService.pageList(current, limit);
        //获取查到的总记录数total
        long total = pageVO.getTotal();
        //获取最终分页结果集
        List<User> records = pageVO.getRecords();
        //将结果组装返回前端
        return R.ok().data("total", total).data("records", records);
    }

    //条件查询带分页的方法
    @ApiOperation(value = "分页展示用户列表(带条件)")
    @PostMapping("pageUserCondition/{current}/{limit}")
    public R pageListUser(@PathVariable long current, @PathVariable long limit,
                          @RequestBody(required = false) UserQuery userQuery) {
        //RequestBody表示前端使用json格式传数据，必须使用Post方式
        PageVO<User> pageVO = userService.pageList(current, limit, userQuery);
        //总记录数
        long total = pageVO.getTotal();
        //数据list集合
        List<User> records = pageVO.getRecords();
        return R.ok().data("total", total).data("records", records);
    }

    //修改用户信息
    @ApiOperation(value = "修改用户信息")
    @PostMapping("updateUser")
    public R updateUser(@RequestBody User user) {
        boolean flag = userService.updateById(user);
        return flag ? R.ok() : R.error();
    }
}
